/**
 * ACe萔
 */
let UI_POINT   = 1;	//|Cg
let UI_BOMB    = 2;	//{
let UI_LIFE    = 3;	//1UP
let UI_GAUGE_S = 4;	//Q[W()
let UI_GAUGE_L = 5;	//Q[W()

//ACe擾E
let ItemBorder = 160;

//ACe͈
let ItemRadius = 24;

//ACe]֌W
let MaxRoll = 360 * 2;
let RollSpeed = 24;

//_ACe擾ō_
let ItemScoreMax = 1000000;
let ItemScoreMin =  100000;

/**
 * w肵ʒuɃACe쐬
 * 
 * @param {Integer} x    xW
 * @param {Integer} x    yW
 * @param {Integer} type 
 */
function CreateUserItem( x, y, type ){
	let itemlist = GetCommonDataDefaultEx( "OFT", "Item", [] );
	itemlist = itemlist ~ [ x, y, type ];
	SetCommonDataEx( "OFT", "Item", itemlist );
}

/**
 * ʋԂĎAACeo
 */
task ItemTask(){
	let itemlist = [];
	let leng = 0;
	
	loop{
		//{GNXehVOiĎ
		if ( GetCommonDataDefaultEx( "OFT", "BombExtendSignal", false ) ) {
			CreateUserItem( GetPlayerX(), GetPlayerY(), UI_BOMB );
			SetCommonDataEx( "OFT", "BombExtendSignal", false );
		}
		
		itemlist = GetCommonDataDefaultEx( "OFT", "Item", [] );
		leng = truncate( length( itemlist ) / 3 );
		
		//z/3̐ACe쐬
		ascent( i in 0..leng ){
			UserItem( itemlist[ i * 3 + 0 ], itemlist[ i * 3 + 1 ], itemlist[ i * 3 + 2 ] );
		}
		
		//oÎŋ
		SetCommonDataEx( "OFT", "Item", [] );
		
		yield;
	}
}

/**
 * [U[ACe
 * 
 * @param {Integer} x    xW
 * @param {Integer} x    yW
 * @param {Integer} type 
 */
task UserItem( x, y, type ){
	let collect = false;
	let px = 0;
	let py = 0;
	let speed = -2.8;
	let roll = 0;
	let rect = 20;
	let rectx = 0;
	let recty = 0;
	
	alternative( type )
		case( UI_POINT ){
			rect = 12;
			rectx = 16;
			recty = 176;
		}
		case( UI_BOMB ){
			rect = 16;
			rectx = 16;
			recty = 192;
		}
		case( UI_LIFE ){
			rect = 16;
			rectx = 32;
			recty = 192;
		}
		case( UI_GAUGE_S ){
			rect = 12;
			rectx = 0;
			recty = 176;
		}
		case( UI_GAUGE_L ){
			rect = 16;
			rectx = 0;
			recty = 192;
		}
	
	let obj = CreateObjEffect( imgItem, x, y, rectx, recty, rect, rect, 3, 255, 255, 255, 255 );
	
	while( !Obj_BeDeleted( obj ) ){
		px = GetPlayerX();
		py = GetPlayerY();
		
		if( collect ){
			//@_Ĉړ
			let angle = GetGapAngle( x, y, px, py );
			x = GetGapX( x, speed, angle );
			y = GetGapY( y, speed, angle );
		}else{
			//Jn
			if( GetPlayerY() < ItemBorder || GetCommonDataDefaultEx( "OFT", "CollectUserItem", false ) ){
				collect = true;
				speed = 10;
			}
			
			//
			if( speed < 2 ){
				speed += 0.06;
			}
			
			//]
			if( roll < MaxRoll ){
				roll += RollSpeed;
				ObjEffect_SetAngle( obj, 0, 0, roll );
			}
			
			y += speed;
		}
		
		//ʒuݒ
		Obj_SetPosition( obj, x, y );
		
		//ACe
		if( GetGapLength( px, py, x, y ) < ItemRadius ){
			GetItem( type, collect );
			Obj_Delete( obj );
		}
		
		//ʊO
		if( y > MaxY + 32 ){
			Obj_Delete( obj );
		}
		
		yield;
	}
}

/**
 * ACeQbg̏
 * 
 * @param {Integer} type    
 * @param {Integer} collect tO
 */
task GetItem( type, collect ){
	alternative( type )
		case( UI_POINT ){
			//_ACe
			let score = 0;
			if( collect || GetPlayerY() <= ItemBorder ){
				score = ItemScoreMax;
			}else{
				score = ( MaxY -  GetPlayerY() ) / ( MaxY - ItemBorder ) * ( ItemScoreMax - ItemScoreMin ) + ItemScoreMin;
			}
			
			AddScore( score );
			PlaySE( sePoint );
		}
		case( UI_BOMB ){
			//{ACe
			AddBomb( 1 );
			PlaySE( seBomb );
		}
		case( UI_LIFE ){
			//1UPACe
			ExtendPlayer( 1 );
			PlaySE( se1up );
		}
		case( UI_GAUGE_S ){
			//Q[W()ACe
			AddShieldGauge( 25 );
			PlaySE( seGauge );
		}
		case( UI_GAUGE_L ){
			//Q[W()ACe
			AddShieldGauge( 200 );
			PlaySE( seGauge );
		}
}